package util;

import org.junit.Test;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 1.ArrayList是实现了基于动态数组的数据结构，LinkedList基于链表的数据结构。
 * 2.对于随机访问get和set，ArrayList觉得优于LinkedList，因为LinkedList要移动指针。
 * 3.对于新增和删除操作add和remove，LinedList比较占优势，因为ArrayList要移动数据。
 */
public class List_ {


    public static void main(String[] args) {


        ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
        list.sort((a,b)-> b-a);



//        list.stream()
//                .filter(a -> a != null)
//                .collect(Collectors.toList());

        System.out.println(list.toString());
    }


    /**
     * 证明 arrayList 迭代器 并发校验
     * ConcurrentModificationException
     */
    @Test
    public void e() throws InterruptedException {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);


        new Thread(() -> {
            Iterator iterator = list.iterator();                  //第1步
            try {
                Thread.sleep(2000);
                iterator.next();                                  //第3步
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        Thread.sleep(1000);
        list.add(2);                                              //第2步

        Thread.currentThread().join();
    }

    //构造
    @Test
    public void test2() {
        System.out.println(11 >> 1);
        System.out.println(11 >>> 1);
    }
}
